home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 1995 #5 & #6 / Amiga Plus CD - 1995 - No. 5 and 6.iso / pd / netz / mailfilter / arexx / convert_u-to.mailfilter < prev   
Text File  |  1995-07-09  |  3KB  |  163 lines

  1. /* Convert_U-TO.mailfilter */
  2.  
  3. /*
  4. ** $VER: Convert_U-TO.mailfilter 1.1 (9.7.95)
  5. **
  6. ** Dieses Script ist für das Filtern von Mails aus Mailing-Listen
  7. ** gedacht, es sucht nach einem 'U-TO:'-Header und wandelt diesen,
  8. ** falls vorhanden, in 'DISKUSSION-IN:'. Der 'EMP:'-Header wird
  9. ** durch Umwandeln in 'X-MAILFILTER:' unwirksam gemacht, dafür
  10. ** wird ein neuer 'EMP:'-Header hinzugefügt.
  11. **
  12. ** Dieses Script ist nur ein Beispiel, es muß von jedem an seine
  13. ** speziellen Bedürfnisse angepasst werden.
  14. */
  15.  
  16. /*
  17. ** Hier kann der Name des Brettes konfiguriert werden,
  18. ** in das die Nachrichten umgeleitet werden sollen.
  19. */
  20.  
  21. brettname = '/-PM-/MAILINGLIST'
  22.  
  23.  
  24.  
  25. /*
  26. ** Ergebnisse anfordern
  27. */
  28.  
  29. OPTIONS RESULTS
  30.  
  31.  
  32.  
  33. /*
  34. ** Headerdatei einlesen und Header gegebenenfalls umwandeln
  35. */
  36.  
  37. anzahl = 0
  38.  
  39. IF OPEN('header','T:MailFilter_Header.mftemp','READ') THEN DO
  40.    DO WHILE ~EOF('header')
  41.  
  42.       /*
  43.       ** Eine Zeile einlesen, aber ACHTUNG! Die ARexx-Funktion 'READLN()'
  44.       ** enthält einen Bug und kann deshalb nur Zeilen mit höchstens 1000
  45.       ** Zeichen einlesen, zum Einlesen von Headerzeilen deshalb immer die
  46.       ** Funktion 'ReadZeile()' benutzen!
  47.       */
  48.  
  49.       zeile.anzahl = ReadZeile('header')
  50.  
  51.       /*
  52.       ** Abbrechen, wenn der Header zu Ende ist
  53.       */
  54.  
  55.       IF zeile.anzahl = '' THEN
  56.          BREAK
  57.  
  58.       /*
  59.       ** Wenn die Nachricht einen 'U-TO:'-Header enthält,
  60.       ** dann wird dieser in 'DISKUSSION-IN:' umgewandelt
  61.       */
  62.  
  63.       IF UPPER(LEFT(zeile.anzahl,5)) = 'U-TO:' THEN
  64.          zeile.anzahl = 'DISKUSSION-IN:'||SUBSTR(zeile.anzahl,6)
  65.  
  66.       /*
  67.       ** Den 'EMP:'-Header durch umwandeln in 'X-MAILFILTER:'
  68.       ** unwirksam machen
  69.       */
  70.  
  71.       IF UPPER(LEFT(zeile.anzahl,4)) = 'EMP:' THEN
  72.          zeile.anzahl = 'X-MAILFILTER:'||SUBSTR(zeile.anzahl,5)
  73.  
  74.       /*
  75.       ** Zähler erhöhen, die abschließende Leerzeile wird nicht mitgezählt
  76.       */
  77.  
  78.       anzahl = anzahl+1
  79.    END
  80. END
  81.  
  82.  
  83.  
  84. /*
  85. ** Headerdatei schließen
  86. */
  87.  
  88. CALL CLOSE('header')
  89.  
  90.  
  91.  
  92. /*
  93. ** Neuen 'EMP:'-Header eintragen
  94. */
  95.  
  96. zeile.anzahl = 'EMP:' brettname
  97. anzahl = anzahl+1
  98. zeile.anzahl = ''
  99.  
  100.  
  101.  
  102. /*
  103. ** Headerdatei neu schreiben
  104. */
  105.  
  106. IF OPEN('header','T:MailFilter_Header.mftemp','WRITE') THEN DO
  107.  
  108.    /*
  109.    ** Alle Zeilen (einschließlich der abschließenden Leerzeile !!!)
  110.    ** neu in die Headerdatei schreiben
  111.    */
  112.  
  113.    DO i = 0 TO anzahl
  114.       CALL WRITELN('header',zeile.i)
  115.    END
  116. END
  117.  
  118.  
  119.  
  120. /*
  121. ** Script beenden
  122. */
  123.  
  124. EXIT(0)
  125.  
  126.  
  127.  
  128. /*
  129. ** Diese Funktion liest eine beliebig lange Zeile aus einer Datei
  130. ** und umgeht damit den Bug in der ARexx-Funktion 'READFILE()'!
  131. **
  132. ** Als Argument muß der logische Name der Datei übergeben werden.
  133. ** Die Funktion liefert als Ergebnis die eingelesene Zeile.
  134. */
  135.  
  136. ReadZeile:
  137.    PROCEDURE
  138.    PARSE ARG datei
  139.  
  140.    /*
  141.    ** Eine Zeile einlesen
  142.    */
  143.  
  144.    zeile = READLN(datei)
  145.  
  146.  
  147.    /*
  148.    ** Prüfen ob das letzte gelesene Zeichen ein LF war, wenn nicht
  149.    ** weiterlesen bis ein LF gefunden wird.
  150.    */
  151.  
  152.    DO FOREVER
  153.       CALL SEEK(datei,-1,'CURRENT')
  154.       zeichen = READCH(datei)
  155.  
  156.       IF zeichen = '0A'x THEN
  157.          BREAK
  158.       ELSE
  159.          zeile = zeile||READLN(datei)
  160.    END
  161.  
  162. RETURN(zeile)
  163.